perm filename MSSIO.FAI[CMS,LCS] blob
sn#717265 filedate 1983-06-18 generic text, type T, neo UTF8
TITLE MSSIO ; ********* JUN 8,74 *********
;; INTERNAL GETFI2,FASTI2,LOOP
INTERNAL GETFI2,FASTI2,INMUS,USTI,USTO,RLOOP
INTERNAL LOOK,LOOKD,LOOKF,PAC,UNPAC,LOOKX,LOOKL
INTERNAL PUTEXT,EXTOUT,GETEXT,EXTIN,FINEXT
; WRITES AND READS DUMP MODE FILES WITH ANY EXTENSION.
ENTRY TYPWRD,TYPSTR,TYPINT,TYPCRLF,TYPFLT,TYPCHR
;TYPES A WORD, STRING, CRLF, INTEGER, FLTING PT., TYPE CHAR STRING(WD CNT)
EXTERNAL AIVECT,AVECT,DPYOUT,RC,DP,ACCPOG,HYDPOG
CH3←13 ;USED WITH GETFI2, LOOKL
CH1←15 ;USED WITH ALL 'LOOK' ROUTINES
CH←12 ;USED WITH EXTIN
CH2←11 ;USED WITH EXTOUT
BLKS←←=1
PATCH: BLOCK 50
;SETCUR: 0 ; NO CURSOR ON GRINNELL
MOVE 0,@(16)
MOVEM 0,X#
MOVE 0,@1(16)
MOVEM 0,Y#
MOVE 0,@2(16)
MOVEM 0,Z#
MOVNI 1,40
ADD 1,X
MOVEM 1,Q#
MOVNI 1,40
ADD 1,Y
MOVEM 1,R#
JSA 16,AIVECT
JUMP Q
JUMP R
MOVEI 1,40
ADD 1,X
MOVEM 1,Q#
MOVEI 1,40
ADD 1,Y
MOVEM 1,R#
JSA 16,AVECT
JUMP Q
JUMP R
MOVNI 1,40
ADD 1,X
MOVEM 1,Q#
MOVEI 1,40
ADD 1,Y
MOVEM 1,R#
JSA 16,AIVECT
JUMP Q
JUMP R
MOVEI 1,40
ADD 1,X
MOVEM 1,Q#
MOVNI 1,40
ADD 1,Y
MOVEM 1,R#
JSA 16,AVECT
JUMP Q
JUMP R
MOVEI 1
MOVEM Q
JSA 16,DPYOUT
JUMP Q
MOVE 0,DP
MOVEM 0,RC+=401
JSA 16,HYDPOG
JUMP Q
JSA 16,ACCPOG
JUMP Q
JRA 16,3(16)
RDCUR: 0
JRA 16,2(16)
CLRCUR: 0
JRA 16,(16)
USTO: 0 ;CALL USTO(N) N=RECORD NUMBER TO REWRITE RECORD
MOVE 1,@(16)
USETO 11,@1
JRA 16,1(16)
USTI: 0 ;CALL USTI(N) N=RECORD NUMBER TO REREAD RECORD
MOVE 1,@(16)
USETI 12,@1
JRA 16,1(16)
DEFINE ERROR (MSG)
< JSA 16,.ERROR
JUMP [ASCIZ/MSG/
]
>
REGS: BLOCK 20
DIR: BLOCK 4
;CALL PUTEXT(<FILE>,<EXT>)
PUTEXT: 0 ;USES EXTOUT,FINEXT, CH2
MOVE 0,@0(16)
MOVEM 0,FILNAM
MOVE 0,@1(16)
MOVEM 0,EXTNAM
PUSHJ 17,INTFIL
SETZM DIR+2
SETZM DIR+3
ENTER CH2,DIR
ERROR <ENTER FAILED>
JRA 16,2(16)
;CALL EXTOUT(<ARRAY>,<NO. OF WORDS>)
EXTOUT: 0
MOVEI 0,@(16)
SUBI 0,1
MOVEM 0,COM
MOVN 0,@1(16)
HRLM 0,COM
OUTPUT CH2,COM
STATZ CH2,740000
ERROR <WRITE ERROR>
JRA 16,2(16)
INTFIL: MOVEI REGS ; INITS DSK
BLT REGS+3
INIT CH2,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
INTF4: MOVE 0,FILNAM#
MOVEM 0,FN#
MOVE 1,[POINT 7,FN]
INTF3: MOVE 2,[POINT 6,DIR]
SETZM DIR
MOVEI 3,5
INTF1: ILDB 0,1
CAIN 0," "
JRST INTF2
SUBI 0,40
IDPB 0,2
SOJG 3,INTF1
INTF2: HRLZI REGS
BLT 3
MOVE 0,EXTNAM#
MOVEM 0,EX#
MOVE 1,[POINT 7,EX]
EXTF3: MOVE 2,[POINT 6,DIR+1]
SETZM DIR+1
MOVEI 3,5
EXTF1: ILDB 0,1
CAIN 0," "
JRST EXTF2
SUBI 0,40
IDPB 0,2
SOJG 3,EXTF1
EXTF2: HRLZI REGS
BLT 3
POPJ 17,
COM: OCT 0,0
BLKNUM: 0
;CALL FINEXT
FINEXT: 0
CLOSE CH2,0
STATZ CH2,740000
ERROR <ERROR AFTER CLOSE>
RELEASE CH2,0
JRA 16,0(16)
;CALL GETEXT(<FILE>,<EXT>)
GETEXT: 0 ;USES CH
SETZM GETCH# ;FLAG TO USE CH
MOVE 0,@0(16)
MOVEM 0,FILNAM
MOVE 0,@1(16)
MOVEM 0,EXTNAM
PUSHJ 17,INTFX
SETZM DIR+3
SETZM DIR+2
LOOKUP CH,DIR
ERROR <LOOKUP FAILED>
JRA 16,2(16)
INTFX: PUSHJ 17,INITCH
JRST INTF4
INITCH: MOVEI REGS ;INITS DSK FOR INPUT
BLT REGS+3
SKIPE GETCH ;SKIP IF DOING GETEXT
JRST GETLK
INIT CH,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
POPJ 17,
GETLK: INIT CH1,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
POPJ 17,
;CALL FASTI2(<ARRAY>,<NO. WORDS>)
EXTIN: 0
MOVEI 0,@(16)
SUBI 0,1
MOVEM 0,COM
MOVN 0,@1(16)
HRLM 0,COM
INPUT CH,COM
STATZ CH,740000
0
JRA 16,2(16)
.ERROR: 0
OUTSTR [ASCIZ/?
/] ;MAKE SURE HE CAN SEE HIS ERROR
OUTSTR @(16) ;OUTPUT ERROR MESSAGE
CALLI 1,12 ;LET USER CONTINUE
JRA 16,1(16)
;CALL GETFI2(<FILE>,<0 OR -1>) 0=DAT,LCS -1=WHERE YOU ARE., -2=HLP,LCS(HELP)
GETFI2: 0 ; USES CH3
MOVE 0,@0(16)
MOVEM 0,FILNAM
MOVE 0,@1(16)
MOVEM 0,PPNW#
PUSHJ 17,INTFIZ
MOVE 0,[SIXBIT/DMD/]
MOVEM 0,DIR+1
GETFL: JSA 16,LKUP
SKIPA
JRST GETF3
SETZM DIR+1
JSA 16,LKUP
SKIPA
GETF3: JRA 16,2(16)
MOVEI 1
MOVEM @1(16) ;SEND BACK A 1 IN 2ND ARGUMENT IF FILE NOT FOUND.
JRA 16,2(16)
LKUP: 0
SETZM DIR+2
SETZM DIR+3
SKIPE PPNW ;0=DAT,LCS NON-ZERO = WHERE EVER YOU ARE
JRST LUP
MOVE 0,[SIXBIT/DATLCS/]
JRST LUP3
LUP: MOVN 0,PPNW
CAIE 0,2 ;-2=HLP,LCS
JRST LUP2
MOVE 0,[SIXBIT/HLPLCS/]
LUP3: MOVEM 0,DIR+3 ;PUTS AWAY THE PPN
LUP2: LOOKUP CH3,DIR
JRA 16,0(16)
JRA 16,1(16)
INTFIZ: MOVEI REGS ;INITS DSK FOR INPUT
BLT REGS+3
INIT CH3,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
JRST INTF4
;CALL FASTI2(<ARRAY>,<NO. WORDS>)
FASTI2: 0
MOVEI 0,@(16)
SUBI 0,1
MOVEM 0,COM
MOVN 0,@1(16)
HRLM 0,COM
INPUT CH3,COM
STATZ CH3,740000
0
JRA 16,2(16)
;; TITLE INMS ;DIMENSION R(4000),K(400),RS(128),KK(400)
;; EXTERNAL GETEXT,PUTEXT,EXTIN,EXTOUT ,FINEXT;EQUIVALENCE (J,RS(18)),(JJ,RS(19))
;R: BLOCK =4000 ; TYPE 1 ;K: BLOCK =400 ;RS: BLOCK =128
INMUS: 0 ;CALL INMUS(NAME,EXT,RN,KWDS,RSTFAC)
MOVE 1,@(16)
MOVE 2,@1(16)
JSA 16,GETEXT
JUMP 1 ;NAME
JUMP 2 ;EXT
MOVE 11,4(16) ;LOC OF RSTFAC ARRAY
MOVE 12,3(16) ;LOC OF KWDS ARRAY
JSA 16,EXTIN ;ACCEPT 2,NAM
JUMP @11 ; CALL GETEXT(NAM,'MS')
JUMP [=128]
MOVE 15,2(16) ;LOC OF RN ARRAY
I1: JSA 16,EXTIN ;CALL EXTIN(R,JJ)
JUMP @15 ;JUMP @R
JUMP =18(11) ;WDS ;THE WD CNT.
MOVE @15 ;@R ;IF(R(1).NE.INTEGER 1)GO TO I3
CAIE 1 ;OLD FORMAT ?
JRST I3 ;NO
USETI 12,2 ;YES, READ 2ND RECORD AGAIN (12 =CH)
JSA 16,EXTIN ;CALL EXTIN(RS,128)
JUMP @12 ;JUMP @KW
JUMP =17(11) ;JUMP NWDS ;CALL EXTIN(K,J)
JRST I1 ;GO BACK AND GET R ARRAY
I3: MOVEI 1,1 ;3 N=1 ;KK(NN)=N
MOVEM 1,(12) ;K(1)=1
MOVEI 5,1
I4: ADD 15,5 ;4 N=N+R(N)+3 HERE'S THE LOOP
KIFIX 5,-1(15) ;GET WD CNT -2
ADDI 5,3 ;NN=NN+1
ADD 1,5
AOJ 12, ;UPDATE THE COUNTER OF THE POINTER LIST
MOVEM 1,(12) ;KK(NN)=N
CAMGE 1,=18(11) ;IF(N.LT.JJ)GO TO 4
JRST I4
JRA 16,5(16)
RLOOP: 0 ;CALL RLOOP(A,B,K)
HRLI 1,@1(16) ;DIMENSION A(1),B(1) -- SOURCE
HRRI 1,@(16) ;DO 1 J=1,K -- DESTINATION
MOVE 2,(16) ;1 A(J)=B(J) -- WORD COUNT
ADD 2,@2(16) ;LOC OF ARRAY A + WDCNT.
BLT 1,-1(2)
JRA 16,3(16)
;LOOK(<FILE>) FOR NO EXT., LOOKD() FOR .DAT, LOOKF() FOR .DMD, LOOKX FOR (.EXT)
LOOKX: 0
MOVE 0,@1(16)
MOVEM 0,FILNAM
PUSHJ 17,INTFIQ+1
MOVE 0,DIR
JRST LOOK1
LOOKF: 0 ;USES CH1
MOVSI 0,'DMD'
JRST LOOK1
LOOKD: 0 ;USES CH1
MOVSI 0,'DAT'
JRST LOOK1
LOOK: 0
MOVEI 0,0
LOOK1: MOVEM 0,DIR+1
MOVE 0,@(16)
MOVEM 0,FILNAM
SETOM GETCH ;USES CH1
PUSHJ 17,INTFIQ
SETZM DIR+2
SETZM DIR+3
LOOKUP CH1,DIR
TDZA 0,0
NPP: MOVNI 0,1
JRA 16,1(16)
LOOKL: 0 ;FUNCTION LOOKL(FILENAME) .LIB ON LIB,XXX
MOVE 0,@(16)
MOVEM 0,FILNAM
PUSHJ 17,INTFIZ ;INIT DSK, CH3
MOVSI 0,'LIB' ;USE .LIB EXTENSION
MOVEM 0,DIR+1
SETZM DIR+2
GETPPN 0,
MOVE 1,[SIXBIT/LIB /] ;FOR LIBRARY AREAS (FOR CODE 11)
HLL 0,1
MOVEM DIR+3 ;NOW PPN IS LIB,XXX WHERE XXX IS YOU.
SETZ 0, ;SET NOT-FOUND FLAG
LOOKUP CH3,DIR ;NOW GET THE .LIB FILE ON YOUR AREA ONLY
JRA 16,1(16)
JRST NPP ;GO SET FOUND FLAG AND RETURN
;;INTFIQ: MOVEI REGS ;INITS DSK FOR INPUT
;; BLT REGS+3
;; INIT CH,17
;; SIXBIT/DSK/
;; 0
;; HALT .-3
; ERROR <CAN'T INIT DSK!>
INTFIQ: PUSHJ 17,INITCH ;GO INIT DSK
;;INTF4: MOVE 0,FILNAM#
;; MOVEM 0,FN#
;; MOVE 1,[POINT 7,FN]
MOVE 1,[POINT 7,FILNAM#]
MOVE 2,[POINT 6,DIR]
SETZM DIR
MOVEI 3,5
INTL1: ILDB 0,1
;; CAIN 0," "
;; JRST INTF2
SUBI 0,40
IDPB 0,2
SOJG 3,INTL1
INTL2: JRST EXTF2
PAC: 0 ;CALL PAC(PW,AR)
MOVEI 4,@1(16) ; ******* USES AC'S 4,5,6 ********
ADDI 4,2
HRR 5,@4 ;SIZE IS 12 BITS
LSHC 5,-10
SOJ 4,
HRR 5,@4
LSHC 5,-16
SOJ 4,
HRR 5,@4
LSHC 5,-16
MOVEM 6,@0(16)
JRA 16,2(16)
UNPAC: 0 ;CALL UNPAC(PW,AR)
HRRZ 1,1(16)
ADDI 1,2
MOVE 2,@0(16)
LSHC 2,-10
ASH 3,-34
MOVEM 3,@1
SOJ 1,
LSHC 2,-16
ASH 3,-26
MOVEM 3,@1
SOJ 1,
LSHC 2,-16
ASH 3,-26
MOVEM 3,@1
JRA 16,2(16)
TYPSTR: 0 ;CALL TYPSTR(STRING)
OUTSTR @(16) ;TYPES OUT A STRING
JRA 16,1(16) ;THIS WILL TYPE IN GROUPS OF 5 CHARS ALWAYS!!!
TYPCHR: 0 ;CALL TYPCHR(STRING,CHAR COUNT)
SKIPL 1,@1(16)
JRST TYPCH2
OUTSTR @(16)
TYPCH1: JRA 16,2(16)
TYPCH2: MOVSI 2,440700
HRRI 2,@(16)
TYPCH3: SOJL 1,TYPCH1
ILDB 3,2
OUTCHR 3
JRST TYPCH3
TYPWRD: 0 ;CALL TYPWRD(WORD) ASSUMES ≤5 CHARS.
MOVSI 2,440700
HRRI 2,@(16)
MOVEI 1,5
TYPWR1: ILDB 3,2
OUTCHR 3
SOJG 1,TYPWR1
JRA 16,1(16)
TYPCRLF: 0 ;CALL TYPCRLF TYPES A CRLF
OUTSTR [ASCIZ /
/]
JRA 16,(16)
TYPINT: 0 ;CALL TYPINT(INTEGER)
SKIPGE 1,@(16) ;TYPES OUT INTEGERS
OUTCHR ["-"]
MOVMS 1
PUSHJ 17,DECREC
JRA 16,1(16)
DECREC: IDIVI 1,=10
HRLM 2,(17)
SKIPE 1
PUSHJ 17,DECREC
HLRZ 1,(17)
ADDI 1,"0"
OUTCHR 1
POPJ 17,
TYPFLT: 0 ;CALL TYPFLT(F)
MOVM 4,@(16) ;NEEDS ACS 1→5 **** PRINTS ONLY TO 2 DECIS.
KIFIX 3,@(16)
FMPR 4,[100.0] ;TO GET THINGS TO RT. OF DEC.
;;*** CAUSES 199.997 TO PRINT AS 199 ** FADR 4,[0.5] ;FOR ROUND OFF.
KIFIX 4,4
IDIVI 4,=100 ;REMAINDER IS IN AC6
JUMPN 3,TYPFL1 ;JUMP IF LFT SIDE .NE.0
SKIPGE @(16) ;IS ORIGINAL NUM. NEG?
OUTCHR ["-"] ;YES
OUTCHR ["0"]
JRST .+3 ;PRINT A ZERO AND SKIP NEXT CALL
TYPFL1: JSA 16,TYPINT
JUMP 3
SKIPN 5 ;PRINT NO MORE IF ONLY ZEROS
JRA 16,1(16)
OUTCHR ["."] ;DECIMAL PT.
;; CAIGE 5,=100
;; OUTCHR["0"] ;FOR ZERO AFTER DECI
CAIGE 5,=10
OUTCHR["0"] ;FOR ZERO AFTER DECI
;; MOVE 3,5
;; IDIVI 3,=100
;; JUMPE 4,DECI ;LOOK AT REMAINDER, JUMP IF NON-ZERO
MOVE 3,5
IDIVI 3,=10
SKIPE 4 ;LOOK AT REMAINDER, JUMP IF NON-ZERO
MOVE 3,5 ;ELSE PRINT ALL 3 DIGITS
DECI: JSA 16,TYPINT
JUMP 3
JRA 16,1(16)
END